home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
LANG
/
PROLOG
/
BP330
/
!BinPro330
/
progs
/
allperms
< prev
next >
Wrap
Text File
|
1994-02-11
|
1KB
|
62 lines
all_permutations([],[[]]).
all_permutations([X|Xs],Perms2):-
all_permutations(Xs,Perms1),
extend_permutations(Perms1,X,Perms2).
extend_permutations([],_,[]).
extend_permutations([Perm|Perms1],X,[[X|Perm]|Perms3]):-
extend_permutations(Perms1,X,Perms2),
insert_item(Perm,X,[],Perms2,Perms3).
insert_item([],_,_,Perms,Perms).
insert_item([Y|Ys],X,Acc,Perms1,[Zs|Perms2]):-
reverse_and_append(Acc,[Y,X|Ys],Zs),
insert_item(Ys,X,[Y|Acc],Perms1,Perms2).
reverse_and_append([],Acc,Acc).
reverse_and_append([X|Xs],Acc,Zs):-
reverse_and_append(Xs,[X|Acc],Zs).
nats(Max,Max,[Max]):-!.
nats(Curr,Max,[Curr|Ns]):-
Curr<Max,
Curr1 is Curr+1,
nats(Curr1,Max,Ns).
perm([],[]).
perm([X|Xs],Zs):-
perm(Xs,Ys),
insert(X,Ys,Zs).
insert(X,Ys,[X|Ys]).
insert(X,[Y|Ys],[Y|Zs]):-
insert(X,Ys,Zs).
g0(N):-nats(1,N,Ns),perm(Ns,_),fail.
g0(_).
g1(N,Ps):-nats(1,N,Ns),all_permutations(Ns,Ps).
g2(N,Ps):-nats(1,N,Ns),findall(P,perm(Ns,P),Ps).
test(Mes,LocalMes,X):-
statistics(global_stack,[H1,_]),
statistics(runtime,_),
X,
statistics(runtime,[_,T]),
statistics(global_stack,[H2,_]),H is H2-H1,
write([Mes,LocalMes]=[time=T,heap=H]),nl.
t0(Mes):-test(Mes,nondet,g0(8)).
t1(Mes):-test(Mes,determ,g1(8,_)).
t2(Mes):-test(Mes,with_findall,g2(8,_)).
go(Mes):-
write('execute with -h20000 option'),nl,
t0(Mes),fail;t1(Mes),fail;t2(Mes),fail.
go:-go('BMARK_allperms').
p:-[allperms].